/**
 * 需求: "荣光无限" 写入指定的文件
 *
 * 1: 一次性写入
 * 2: 分配写入
 */

let fs = require('fs')

// 一个汉字 => 3个字节
let ws = fs.createWriteStream('stream-drain.txt', {
  highWaterMark: 3, // 一次只读取3个字节
})

// >>>>>>>>>>>>>>>>>>>> 一次性写入 <<<<<<<<<<<<<<<<<<<<
// ws.write('荣光无限')

// >>>>>>>>>>>>>>>>>>>> 分批写入 <<<<<<<<<<<<<<<<<<<<
let source = '荣光无限'.split('')
let num = 0
let flag = true
function executeWrite() {
  flag = true // drain事件调用的时候修改为true, 如果再次超出 high water mark 会自动修改为 false
  while (num !== source.length && flag) {
    flag = ws.write(source[num])
    num++
  }
}
executeWrite()

ws.on('drain', () => {
  console.info('drain事件被触发了')
  executeWrite()
})
